package com.dudu.controller;

import java.util.List;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.apache.commons.lang.StringUtils;

import com.dudu.bean.RoleBean;
import com.dudu.bean.RoleMenuBean;
import com.dudu.bean.RoleUserBean;
import com.dudu.bean.UserBean;
import com.dudu.enumeration.OperateTypeEnum;
import com.dudu.service.ILogService;
import com.dudu.service.IRoleService;
import com.dudu.service.impl.LogService;
import com.dudu.service.impl.RoleServiceImpl;

import core.CoreService;

/**
 * 角色权限(管理平台)
 * 
 * @author gaoxs
 * 
 */
public class RoleController extends CoreService implements IRoleController {
	// 当前登陆用户
	private final String KEY_CURRENT_USER = "key_current_user";
	// 用于记录相应接口调用的日志
	private ILogService logService = new LogService();
	//角色权限
	private IRoleService roleService=new RoleServiceImpl();
	/**
	 * 查询所有角色
	 * @return
	 */
	public String queryAll() {
		// 最后返回的对象
        JSONObject object = new JSONObject();
        // 获取当前登录用户信息
        UserBean currentUser = (UserBean) this.getSession().getAttribute(KEY_CURRENT_USER);
        // 判断如果用户信息不为空则继续下一步
        if (currentUser != null) {
        	JSONArray jsonArray = new JSONArray();
        	//获取所有角色
	        List<JSONObject> roles = this.roleService.queryAll();
	        //转成JSON
	        jsonArray = JSONArray.fromObject(roles);
	        //设置返回值
	        JSONObject dataobject = new JSONObject();
	        object.put("flag", "000000");
	        object.put("desc", "success");
	        dataobject.put("totalItemNum", roles.size());
	        dataobject.put("items", jsonArray);
	        object.put("data", dataobject);
        } else {
			object.put("flag", "100000");
		}
        return returnData(object.toString());
	}
	/**
	 * 新增角色
	 * @return
	 */
	public String doInsert() {
		// 最后返回的对象
        JSONObject object = new JSONObject();
        // 获取当前登录用户信息
        UserBean currentUser = (UserBean) this.getSession().getAttribute(KEY_CURRENT_USER);
        // 判断如果用户信息不为空则继续下一步
        if (currentUser != null) {
            String dataStr = (String) this.getRequest().getParameter("data");//获取data
            JSONObject data = JSONObject.fromObject(dataStr);//转成JSON串
            String name = data.getString("name");//角色名称
            String description = data.getString("description");//描述
            RoleBean role = new RoleBean();
            role.setName(name);//角色名称
            role.setDescription(description);//描述
            
            int pId = this.roleService.insertRole(role);//新入角色
            
            logService.log(OperateTypeEnum.ADD.getKey(), currentUser.getId(), currentUser.getName(), 
					"t_role", "名称："+name+"|描述："+description+
					"|主键："+ pId);
            object.put("flag", "000000");
	        object.put("desc", "success");
        } else {
			object.put("flag", "100000");
		}

        return returnData(object.toString());
    }
	
	/**
	 * 修改角色
	 * @return
	 */
	public String doEdit() {
		// 最后返回的对象
        JSONObject object = new JSONObject();
        // 获取当前登录用户信息
        UserBean currentUser = (UserBean) this.getSession().getAttribute(KEY_CURRENT_USER);
        // 判断如果用户信息不为空则继续下一步
        if (currentUser != null) {
            String dataStr = (String) this.getRequest().getParameter("data");//获取data
            JSONObject data = JSONObject.fromObject(dataStr);//转成JSON串
            String roleid = data.getString("roleid");//角色ID
            String name = data.getString("name");//角色名称
            String description = data.getString("description");//描述

            if (StringUtils.isNotBlank(roleid)) {//角色ID不能为空
            	RoleBean role = new RoleBean();
            	role.setId(Integer.valueOf(roleid));//角色ID
                role.setName(name);//角色名称
                role.setDescription(description);//描述
                
                int pId = this.roleService.updateRole(role);//更新角色
                
                logService.log(OperateTypeEnum.EDIT.getKey(), currentUser.getId(), currentUser.getName(), 
                		"t_role", "名称："+name+"|描述："+description+	"|主键："+ pId);
            }
            object.put("flag", "000000");
	        object.put("desc", "success");
        } else {
			object.put("flag", "100000");
		}

        return returnData(object.toString());
	}
	
	/**
	 * 查询角色下的权限
	 * @return
	 */
	public String queryMenuByRole() {
		// 最后返回的对象
        JSONObject object = new JSONObject();
        // 获取当前登录用户信息
        UserBean currentUser = (UserBean) this.getSession().getAttribute(KEY_CURRENT_USER);
        // 判断如果用户信息不为空则继续下一步
        if (currentUser != null) {
        	JSONArray jsonArray = new JSONArray();
        	//获取角色ID
        	String roleid = this.getRequest().getParameter("roleid");
	        //根据角色ID查询权限
        	List<JSONObject> menus = this.roleService.queryMenuByRole(Integer.valueOf(roleid));
	        //转成JSON
        	jsonArray = JSONArray.fromObject(menus);
        	//设置返回值
	        JSONObject dataobject = new JSONObject();
	        object.put("flag", "000000");
	        object.put("desc", "success");
	        dataobject.put("totalItemNum", menus.size());
	        dataobject.put("items", jsonArray);
	        object.put("data", dataobject);
        } else {
			object.put("flag", "100000");
		}
        return returnData(object.toString());
	}

	/**
	 * 更新角色权限
	 * @return
	 */
	public String updateRoleMenu() {
		// 最后返回的对象
        JSONObject object = new JSONObject();
        // 获取当前登录用户信息
        UserBean currentUser = (UserBean) this.getSession().getAttribute(KEY_CURRENT_USER);
        // 判断如果用户信息不为空则继续下一步
        if (currentUser != null) {
        	//获取角色ID
        	int roleid = Integer.valueOf(this.getRequest().getParameter("roleid"));
        	//获取data
        	String dataStr = (String) this.getRequest().getParameter("data");
            String[] menuIds = dataStr.split(",");
            //1、清空角色原有的权限配置
            this.roleService.deleteRoleMenuByRoleid( roleid);
            //2、添加角色新的权限配置
            RoleMenuBean roleMenu = new RoleMenuBean();
    		roleMenu.setRole_id(roleid);
            for(String menuId:menuIds){
            	if(StringUtils.isNotBlank(menuId)){
            		roleMenu.setMenu_id(Integer.valueOf(menuId));
            		this.roleService.insertRoleMenu( roleMenu);
            	}
            }

            
            logService.log(OperateTypeEnum.EDIT.getKey(), currentUser.getId(), currentUser.getName(), 
            		"t_role_menu", "更新权限菜单："+dataStr + "|角色主键："+ roleid);
            object.put("flag", "000000");
	        object.put("desc", "success");
        } else {
			object.put("flag", "100000");
		}

        return returnData(object.toString());
	}
	
	/**
	 * 查询用户角色
	 * @return
	 */
	public String queryUserByRole() {
		// 最后返回的对象
        JSONObject object = new JSONObject();
        // 获取当前登录用户信息
        UserBean currentUser = (UserBean) this.getSession().getAttribute(KEY_CURRENT_USER);
        // 判断如果用户信息不为空则继续下一步
        if (currentUser != null) {
        	JSONArray jsonArray = new JSONArray();
        	//得到角色ID
        	String roleid = this.getRequest().getParameter("roleid");
        	//根据角色ID查询所有用户
	        List<JSONObject> users = this.roleService.queryUserByRole(Integer.valueOf(roleid));
	        //转成JSON
	        jsonArray = JSONArray.fromObject(users);
	        //设置返回值
	        JSONObject dataobject = new JSONObject();
	        object.put("flag", "000000");
	        object.put("desc", "success");
	        dataobject.put("totalItemNum", users.size());
	        dataobject.put("items", jsonArray);
	        object.put("data", dataobject);
        } else {
			object.put("flag", "100000");
		}
        return returnData(object.toString());
	}

	/**
	 * 更新用户角色
	 * @return
	 */
	public String updateRoleUser() {
		// 最后返回的对象
        JSONObject object = new JSONObject();
        // 获取当前登录用户信息
        UserBean currentUser = (UserBean) this.getSession().getAttribute(KEY_CURRENT_USER);
        // 判断如果用户信息不为空则继续下一步
        if (currentUser != null) {
        	//得到角色ID
        	int roleid = Integer.valueOf(this.getRequest().getParameter("roleid"));
        	//获取参数
        	String dataStr = (String) this.getRequest().getParameter("data");
        	String[] userIds = dataStr.split(",");
            //1、清空角色原有的权限配置
            this.roleService.deleteRoleUserByRoleid( roleid);
            //2、添加角色新的权限配置
            RoleUserBean roleUser = new RoleUserBean();
            roleUser.setRole_id(roleid);
            for(String userId:userIds){
            	if(StringUtils.isNotBlank(userId)){
            		roleUser.setUser_id(Integer.valueOf(userId));
            		this.roleService.insertRoleUser(roleUser);
            	}
            }

            
            logService.log(OperateTypeEnum.EDIT.getKey(), currentUser.getId(), currentUser.getName(), 
            		"t_role_user", "更新角色用户："+dataStr + "|角色主键："+ roleid);
            object.put("flag", "000000");
	        object.put("desc", "success");
        } else {
			object.put("flag", "100000");
		}

        return returnData(object.toString());
	}
	
}
